/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package practica1.ui.dialog;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import practica1.Practica1;
import practica1.language.Language;
import practica1.logic.LogicExperimento;

/**
 * JDialog que muestra la información de las propiedades del experimento
 * @author Miguel González - Ceura
 */
public class DialogPropiedades extends JDialog {
    public static final int CANCELAR = 0;
    public static final int ACEPTAR = 1;
    
    private int action;
    private LogicExperimento experimento;
    private JTextField txtNombreExperimento;
    private JTextField txtTipoBacteria;
    private JTextField txtNombreInvestigador;
    private JTextField txtProyectoInvestigacion;
    
    /**
     * Constructor del JDialog
     * @param parent Frame sobre el que se localiza
     * @param experimento LogicExperimento sobre el que se muestran las propiedades
     */
    public DialogPropiedades(Frame parent, LogicExperimento experimento) {
        super(parent);
        
        this.experimento = experimento;
        
        init();
        
        setLocationRelativeTo(parent);
    }
    
    /**
     * Constructor del JDialog
     * @param experimento LogicExperimento sobre el que se muestran las propiedades
     */
    public DialogPropiedades(LogicExperimento experimento) {
        super();
        
        init();
        
        setLocationRelativeTo(null);
    }
    
    /**
     * Inicializa los compontentes Swing
     */
    private void init() {
        Container contentPane = getContentPane();
        setSize(400, 230);
        setTitle(Language.getI().getP("PROPIEDADES_EXPERIMENTO"));
        setModal(true);
        contentPane.setLayout(new BorderLayout());

        //Inicializamos los componentes Swing
        JLabel lblNombreExperimento = new JLabel(
                Language.getI().getP("NOMBRE_EXPERIMENTO"));
        txtNombreExperimento = new JTextField();
        txtNombreExperimento.setText(experimento.getNombreExperimento());
        txtNombreExperimento.addActionListener(new PulsadoAceptar());
        
        JLabel lblTipoBacteria = new JLabel(
                Language.getI().getP("TIPO_BACTERIA"));
        txtTipoBacteria = new JTextField();
        txtTipoBacteria.setText(experimento.getTipoBacteria());
        txtTipoBacteria.addActionListener(new PulsadoAceptar());
        
        JLabel lblNombreInvestigador = new JLabel(
                Language.getI().getP("NOMBRE_INVESTIGADOR"));
        txtNombreInvestigador = new JTextField();
        txtNombreInvestigador.setText(experimento.getNombreInvestigador());
        txtNombreInvestigador.addActionListener(new PulsadoAceptar());
        
        JLabel lblProyectoInvestigacion = new JLabel(
                Language.getI().getP("PROYECTO_INVESTIGACION"));
        txtProyectoInvestigacion = new JTextField();
        txtProyectoInvestigacion.setText(experimento.getProyectoInvestigacion());
        txtProyectoInvestigacion.addActionListener(new PulsadoAceptar());
        
        JButton btnAceptar = new JButton(Language.getI().getP("ACEPTAR"));
        btnAceptar.addActionListener(new PulsadoAceptar());
        JButton btnCancelar = new JButton(Language.getI().getP("CANCELAR"));
        btnCancelar.addActionListener(new PulsadoCancelar());
        
        //Panel norte
        JPanel panelNorte = new JPanel(new FlowLayout(FlowLayout.CENTER));
        panelNorte.add(new JLabel(
                Language.getI().getP("PROPIEDADES_EXPERIMENTO") + ": " +
                experimento.getNombreExperimento()));
        contentPane.add(panelNorte, BorderLayout.NORTH);
        
        //Panel centro
        JPanel panelCentro = new JPanel(new GridBagLayout());
        panelCentro.setBorder(BorderFactory.createEmptyBorder(15,5,5,5));
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.HORIZONTAL;
        c.ipadx = 25;
        
        c.gridx = 0;
        c.gridy = 0;
        panelCentro.add(lblNombreExperimento, c);
        c.gridx = 1;
        c.gridy = 0;
        panelCentro.add(txtNombreExperimento, c);
        c.gridx = 0;
        c.gridy = 1;
        panelCentro.add(lblTipoBacteria, c);
        c.gridx = 1;
        c.gridy = 1;
        panelCentro.add(txtTipoBacteria, c);
        c.gridx = 0;
        c.gridy = 2;
        panelCentro.add(lblNombreInvestigador, c);
        c.gridx = 1;
        c.gridy = 2;
        panelCentro.add(txtNombreInvestigador, c);
        c.gridx = 0;
        c.gridy = 3;
        panelCentro.add(lblProyectoInvestigacion, c);
        c.gridx = 1;
        c.gridy = 3;
        panelCentro.add(txtProyectoInvestigacion, c);
        contentPane.add(panelCentro, BorderLayout.CENTER);
        
        
        //Panel inferior
        JPanel panelInferior = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        panelInferior.add(btnCancelar);
        panelInferior.add(btnAceptar);
        contentPane.add(panelInferior, BorderLayout.SOUTH);
    }
    
    /**
     * Devuelve el nombre del experimento
     * @return String nombreExperimento
     */
    public String getNombreExperimento() {
        return txtNombreExperimento.getText();
    }
    
    /**
     * Devuelve el tipo de bacteria
     * @return String tipoBacteria
     */
    public String getTipoBacteria() {
        return txtTipoBacteria.getText();
    }
    
    /**
     * Devuelve el nombre del investigador
     * @return String nombreInvestigador
     */
    public String getNombreInvestigador() {
        return txtNombreInvestigador.getText();
    }

    /**
     * Devuelve el proyecto de investigación del experimento
     * @return String proyectoInvestigacion
     */
    public String getProyectoInvestigacion() {
        return txtProyectoInvestigacion.getText();
    }    
    
    /**
     * Devuelve la acción ocurrida sobre el JDialog
     * @return int action
     */
    public int getAction() {
        return action;
    }
    
    /**
     * Evento que se produce al pulsar aceptar
     */
    private class PulsadoAceptar implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            aceptarAccion();
        }
    }

    /**
     * Se ha aceptado la acción
     */
    private void aceptarAccion() {
        if(estanTextosIntroducidos()) {
            action = ACEPTAR;
            setVisible(false);
        } else {
            JOptionPane.showMessageDialog(Practica1.getInstance(),
                Language.getI().getP("FALTAN_DATOS"),
                Language.getI().getP("ADVERTENCIA"),
                JOptionPane.WARNING_MESSAGE);
        }
    }
    
    /**
     * Evento que se produce al cancelar la acción
     */
    private class PulsadoCancelar implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            action = CANCELAR;
            setVisible(false);
        }
    }
    
    /**
     * Método que comprueba si están todos los campos introducidos
     * @return Devuelve verdad si están todos los campo introducidos, sino falso
     */
    public boolean estanTextosIntroducidos() {
        return (!txtNombreExperimento.getText().isEmpty() &&
            !txtTipoBacteria.getText().isEmpty() &&
            !txtNombreInvestigador.getText().isEmpty() &&
            !txtProyectoInvestigacion.getText().isEmpty());
    }
}
